package fiuba.td.fabrica.view.frames;

import java.util.Observable;
import java.util.Observer;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

import fiuba.td.fabrica.constants.GlobalConstants;
import fiuba.td.fabrica.view.entities.VentanaTerreno;

/**
 * Clase que controla que ventanas mostrar 
 * @author UserXP
 *
 */
public class ManejadorVentanas implements Observer {

	static final int VENTANA_ANCHO = 1024;
	static final int VENTANA_ALTO  = 550;
	
	private VentanaTerreno ventanaTerrenos = null;
	private JugarJDialog ventanaJugar = null;
	private VentanaJuegoTemplate ventanaEdicion = null;
	
	public ManejadorVentanas()	{
		mostrarVentanaTerrenos();
	}

	public JFrame getVentanaTerrenos (){
		if (this.ventanaTerrenos == null){
			this.ventanaTerrenos = new VentanaTerreno (VENTANA_ANCHO, VENTANA_ALTO, false, this);
			this.ventanaTerrenos.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		}
		return this.ventanaTerrenos;
	}
	
	public JDialog getVentanaJugar (){
		if (this.ventanaJugar == null){
			this.ventanaJugar = new JugarJDialog(VENTANA_ANCHO, VENTANA_ALTO, false, this);
		}
		return this.ventanaJugar;
	}
	
	public JDialog getVentanaEdicion (){
		if (this.ventanaEdicion == null){
			this.ventanaEdicion = new EdicionJDialog(VENTANA_ANCHO, VENTANA_ALTO, false, this);
		}
		return this.ventanaEdicion;
		
	}
	
	private void ocultarVentanaTerrenos (){
		this.getVentanaTerrenos().setVisible(false);
	}

	private void mostrarVentanaTerrenos (){
		this.getVentanaTerrenos().setVisible(true);
	}

	private void ocultarVentanaJugar (){
		this.getVentanaJugar().setVisible(false);
	}
	
	private void mostrarVentanaJugar (){
		((EscenarioJugarPanel)ventanaJugar.getCentroJPanel()).actualizar();
		this.getVentanaJugar().setVisible(true);
	}

	private void ocultarVentanaEdicion (){
		this.getVentanaEdicion().setVisible(false);
	}
	
	private void mostrarVentanaEdicion (){
		this.getVentanaEdicion().setVisible(true);
	}
	
	
	public void update(Observable arg0, Object arg1) {
		// Cuando se compra o alquila un terreno, la pantalla siguiente es la de edicion de lineas de produccion
		if (GlobalConstants.BOTON_TERRENOS_ALQUILAR.equals(arg1) || GlobalConstants.BOTON_TERRENOS_COMPRAR.equals(arg1)){
			ocultarVentanaTerrenos();
			ocultarVentanaJugar();
			mostrarVentanaEdicion();
		}
		if (GlobalConstants.BOTON_TERRENOS_COMPRAR_SIN_DINERO.equals(arg1)){
			mostrarVentanaTerrenos();
//			ocultarVentanaJugar();
//			ocultarVentanaEdicion();
		}
		// Cuando el juego se pausea, la pantalla siguiente es la de edicion de lineas de produccion
		else if (GlobalConstants.BOTON_JUGAR_PAUSA.equals(arg1)){
			ocultarVentanaTerrenos();
			ocultarVentanaJugar();
			mostrarVentanaEdicion();
		}
		// Cuando se finaliza la edicion, la pantalla siguiente es la de del juego
		else if (GlobalConstants.BOTON_EDICION_FINALIZAR.equals(arg1)){
			ocultarVentanaTerrenos();
			mostrarVentanaJugar();
			ocultarVentanaEdicion();
		}
		// Cuando se cierra la pantalla de edicion, la pantalla siguiente es la del juego
		else if (GlobalConstants.EDICION_WINDOW_CLOSED.equals(arg1)){
			System.exit(0);
			
		}
		// Cuando se cierra la pantalla del juego, la pantalla siguiente es la de seleccion de terrenos
		else if (GlobalConstants.JUGAR_WINDOW_CLOSED.equals(arg1)){
			System.exit(0);
		}
		else if (GlobalConstants.BOTON_EDICION_VENDER_TERRENO.equals(arg1)){
			mostrarVentanaTerrenos();
			ocultarVentanaJugar();
			ocultarVentanaEdicion();
			
			//nulo las ventanas porque se tienen que volver a crear de acuerdo al terreno elegido.
			this.ventanaEdicion = null;
			this.ventanaJugar = null;
			this.ventanaTerrenos.actualizarDinero();
		}
		
	}
	

}
